package daily.jun0604;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
//创建一个实现Runnable接口的实现类，重写run方法，设置线程任务。
class RunnableImpl implements Runnable{
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"创建了一个新的线程执行");
    }
}
public class ThreadPoolTest {
    public static void main(String[] args) {
        //1.使用线程池的Executors工厂类中提供的静态方法创建一个线程池
        //此处使用固定线程数量的线程池，固定只有2个线程
        ExecutorService pool = Executors.newFixedThreadPool(2);
        //3.调用ExecutorService接口中的submit方法，传递线程任务(实现类)，开启线程，执行run方法
        //线程池会一直开启,使用完了线程,会自动把线程归还给线程池,线程可以继续使用
        pool.submit(new RunnableImpl());//pool-1-thread-1创建了一个新的线程执行
        pool.submit(new RunnableImpl());//pool-1-thread-1创建了一个新的线程执行
        pool.submit(new RunnableImpl());//pool-1-thread-1创建了一个新的线程执行
        pool.submit(new RunnableImpl());//pool-1-thread-2创建了一个新的线程执行
        //4.调用ExecutorService中的方法shutdown销毁线程池(不建议执行)
        pool.shutdown();

        pool.submit(new RunnableImpl());//抛RejectedExecutionException异常,线程池都没有了,就不能获取线程了
    }
}
